package Modelo;
import Conexion.Conexion;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class SIS_SUB_PROCESO{
	private double ID;
	private double NIVEL;
	private String DESCRIPCION;
	private String URL;
	private String URL_ICONO;
	private Conexion con = null;

	public SIS_SUB_PROCESO(){}

	public SIS_SUB_PROCESO(String URL ,String URL_ICONO ,String DESCRIPCION,double NIVEL,double ID){
		this.URL =URL;
		this.DESCRIPCION =DESCRIPCION;
		this.NIVEL =NIVEL;
		this.ID =ID;
                this.URL_ICONO = URL_ICONO;
	}

	public boolean Insertar(){
		try{
			String consulta;
                        if(NIVEL==0)
                        consulta = "insert into BROKER.SIS_SUB_PROCESO(URL,DESCRIPCION,NIVEL,ID, URL_ICONO) VALUES ('"+URL+"','"+DESCRIPCION+"',null,"+ID+", '"+URL_ICONO+"')";
                        else
                        consulta = "insert into BROKER.SIS_SUB_PROCESO(URL,DESCRIPCION,NIVEL,ID, URL_ICONO) VALUES ('"+URL+"','"+DESCRIPCION+"',"+NIVEL+","+ID+", '"+URL_ICONO+"')";
			con.EjecutarSentencia(consulta);                       
			return true;
		}
		catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
        
        public List<SIS_SUB_PROCESO> BuscarXusuario(double id){
		try{
                    String consulta= "SELECT DISTINCT ss.ID, ss.NIVEL, ss.DESCRIPCION, ss.URL, ss.URL_ICONO FROM BROKER.SIS_SUB_PROCESO ss, BROKER.SIS_SUB_PROCESO HIJOS WHERE (HIJOS.NIVEL = SS.ID) AND (HIJOS.ID NOT IN (SELECT A.ID FROM BROKER.SIS_SUB_PROCESO A, BROKER.SIS_SUB_PROCESO B  WHERE (B.NIVEL = A.ID))) AND HIJOS.ID IN (SELECT SIS_SUB_PROCESO.ID  FROM BROKER.RHH_CARGO, BROKER.RHH_USUARIO, BROKER.RRH_CARGO_PERFIL, BROKER.SIS_PERFILES, BROKER.SIS_PERFILES_ROLES, BROKER.SIS_ROLES, BROKER.SIS_PROCESO_ROLES, BROKER.SIS_SUB_PROCESO  WHERE (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID) AND (RRH_CARGO_PERFIL.ID_CARGO = RHH_CARGO.ID) AND (RRH_CARGO_PERFIL.ID_PERFIL = SIS_PERFILES.ID) AND (SIS_PERFILES_ROLES.ID_PERFILES = SIS_PERFILES.ID) AND (SIS_PERFILES_ROLES.ID_ROLES = SIS_ROLES.ID) AND (SIS_PROCESO_ROLES.ID_ROLES = SIS_ROLES.ID) AND (SIS_PROCESO_ROLES.ID_SUB_PROCESO = SIS_SUB_PROCESO.ID) AND RHH_USUARIO.ID="+id+" ) AND  ss.NIVEL IS NULL";
                    ResultSet rs = con.EjecutarConsulta(consulta);
                    return Cargar(rs);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}
        
        
        
        public List<SIS_SUB_PROCESO> BuscarHijos(double nivel){
		try{
                    String consulta;
                    if(nivel==0)
                         consulta= "select * from BROKER.SIS_SUB_PROCESO sp where NIVEL is null";
                    else
                         consulta= "select * from BROKER.SIS_SUB_PROCESO sp where NIVEL ="+nivel;
                    ResultSet rs = con.EjecutarConsulta(consulta);
                    return Cargar(rs);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}
        
        public List<SIS_SUB_PROCESO> TodosLosInactivos(double rol, String text){
		try{
                      String consulta = "select * from BROKER.SIS_SUB_PROCESO sp \n" +
                                        "where sp.ID not in(select ID_SUB_PROCESO from BROKER.SIS_PROCESO_ROLES where ID_ROLES = "+rol+")\n" +
                                        "and UPPER(sp.descripcion) like UPPER('%"+text+"%')";
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}
        
        public List<SIS_SUB_PROCESO> buscadorTodosLosInactivos(double rol,String descripcion){
		try{String consulta = "select * from BROKER.SIS_SUB_PROCESO  where ID not in(select ID_SUB_PROCESO from BROKER.SIS_PROCESO_ROLES where ID_ROLES = "+rol+") and (UPPER (DESCRIPCION) like  UPPER('%"+descripcion+"%'))";
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}
        
        public SIS_SUB_PROCESO Buscar(double id, String usr) throws SQLException{
		String consulta = "select ssp.NIVEL, ssp.DESCRIPCION,ssp.ID, ssp.URL, ssp.URL_ICONO from BROKER.RHH_USUARIO ru, BROKER.RHH_CARGO rc, BROKER.RRH_CARGO_PERFIL rcp, BROKER.SIS_PERFILES_ROLES spr, BROKER.SIS_PROCESO_ROLES sprr, BROKER.SIS_SUB_PROCESO ssp where ru.USUARIO like ('"+usr+"') and rc.ID = ru.ID_CARGO and rcp.ID_CARGO = rc.ID and spr.ID_PERFILES = rcp.ID_PERFIL and sprr.ID_ROLES = spr.ID_ROLES and ssp.ID = sprr.ID_SUB_PROCESO and ssp.ID = "+id+" GROUP BY( ssp.NIVEL, ssp.DESCRIPCION,ssp.ID, ssp.URL, ssp.URL_ICONO)";
                ResultSet rs = con.EjecutarConsulta(consulta);                
                List<SIS_SUB_PROCESO> lista = Cargar(rs);
                if(lista.size()>0)
                    return lista.get(0);
                else
                    return null;
	}

	public boolean EliminarXid(){
		try{
			String consulta = "delete from BROKER.SIS_SUB_PROCESO where ID = "+getID();
			con.EjecutarSentencia(consulta);
			return true;
			}
		catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
        public List<SIS_SUB_PROCESO> BusquedaXDescripcion(String descripcion, String usr){
		try{String consulta = "SELECT SIS_SUB_PROCESO.URL,SIS_SUB_PROCESO.URL_ICONO,SIS_SUB_PROCESO.NIVEL,SIS_SUB_PROCESO.ID,SIS_SUB_PROCESO.DESCRIPCION\n" +
                                        "FROM BROKER.RHH_USUARIO,\n" +
                                        "BROKER.RHH_CARGO,\n" +
                                        "BROKER.RRH_CARGO_PERFIL,\n" +
                                        "BROKER.SIS_PERFILES_ROLES,\n" +
                                        "BROKER.SIS_PROCESO_ROLES,\n" +
                                        "BROKER.SIS_SUB_PROCESO,\n" +
                                        "BROKER.SIS_ROLES,\n" +
                                        "BROKER.SIS_PERFILES\n" +
                                        "WHERE (RHH_USUARIO.ID_CARGO = RHH_CARGO.ID)\n" +
                                        "AND (RRH_CARGO_PERFIL.ID_CARGO = RHH_CARGO.ID)\n" +
                                        "AND (SIS_PROCESO_ROLES.ID_SUB_PROCESO = SIS_SUB_PROCESO.ID)\n" +
                                        "AND (SIS_PERFILES_ROLES.ID_ROLES = SIS_ROLES.ID)\n" +
                                        "AND (SIS_PROCESO_ROLES.ID_ROLES = SIS_ROLES.ID)\n" +
                                        "AND (RRH_CARGO_PERFIL.ID_PERFIL = SIS_PERFILES.ID)\n" +
                                        "AND (SIS_PERFILES_ROLES.ID_PERFILES = SIS_PERFILES.ID)\n" +
                                        "AND (UPPER(SIS_SUB_PROCESO.DESCRIPCION) LIKE UPPER('"+descripcion+"%'))\n" +
                                        "AND (SIS_SUB_PROCESO.URL IS NOT NULL)\n" +
                                        "AND (RHH_USUARIO.ID = "+usr+")";
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}
	public SIS_SUB_PROCESO BuscarXid(double id){
		try{String consulta = "select * from BROKER.SIS_SUB_PROCESO where ID = "+id;
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs).get(0);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}

	public List<SIS_SUB_PROCESO> Todos(){
		try{String consulta = "select * from BROKER.SIS_SUB_PROCESO";
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}
        
        public List<SIS_SUB_PROCESO> TodosProceso(Double idProceso){
		try{String consulta = "select * from BROKER.SIS_SUB_PROCESO where NIVEL ="+idProceso;
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}

	public List<SIS_SUB_PROCESO> Cargar(ResultSet rs) throws SQLException{
            List<SIS_SUB_PROCESO> lista = new ArrayList<SIS_SUB_PROCESO>();
            while(rs.next())
            {
                    SIS_SUB_PROCESO objeto = new SIS_SUB_PROCESO();

                    objeto.setID(rs.getDouble("ID"));
                    objeto.setNIVEL(rs.getDouble("NIVEL"));
                    objeto.setDESCRIPCION(rs.getString("DESCRIPCION"));
                    objeto.setURL(rs.getString("URL"));
                    objeto.setURL_ICONO(rs.getString("URL_ICONO"));
                    objeto.setCon(con);
                    lista.add(objeto);
            }
            return lista;
	}

	public double getID(){
		return ID;
	}
	public void setID(double ID){
		this.ID=ID;
	}

	public double getNIVEL(){
		return NIVEL;
	}
	public void setNIVEL(double NIVEL){
		this.NIVEL=NIVEL;
	}

	public String getDESCRIPCION(){
		return DESCRIPCION;
	}
	public void setDESCRIPCION(String DESCRIPCION){
		this.DESCRIPCION=DESCRIPCION;
	}

	public String getURL(){
		return URL;
	}
	public void setURL(String URL){
		this.URL=URL;
	}

	public Conexion getCon() {
		return con;
	}
	public void setCon(Conexion con) {
		this.con = con;
	}

    public String getURL_ICONO() {
        return URL_ICONO;
    }

    public void setURL_ICONO(String URL_ICONO) {
        this.URL_ICONO = URL_ICONO;
    }
        
        
}
